package errcode

//定义一个错误结构体，统一管理程序错误 程序自定义错误

type ErrCode struct {
	Code    int
	Message string
}

/*
error类型就是一个接口，只要实现Error()方法都属于error类型
type error interface{
Error() string
}
*/

func (e ErrCode) Error() string {
	return e.Message
}

// 解析错误的函数 --错误标准化返回
// 没错误返回OK，有错误返回对应的错误，未知错误返回InternalServerError
func DecodeErr(err error) (int, string) {
	if err == nil {
		return OK.Code, OK.Message
	}
	//type -- switch
	//断言，如果是ErrCode类型就返回其他自定义错误码，如果不是就返回自定义错误码InternalServerError
	//类型断言.(type)和switch组合使用，判断是xx类型匹配再对值进行处理
	switch typed := err.(type) {
	case *ErrCode:
		//typed获取到的是 已赋值的结构体ErrCode（err）的值，这个值从接口调用的函数传给SendRsp传给DecodeErr
		return typed.Code, typed.Message
	default:
		return InternalServerError.Code, InternalServerError.Message
	}
}
